package com.wry.eventloopgroup;

import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.ScheduledFuture;

import java.util.concurrent.TimeUnit;

/**
 * <h1>  <h1>
 *
 * @author wry
 * @since 2023/4/20 15:47
 */
public class Demo01 {
    /**
     * EventLoop/EventLoopGroup继承自JDK原生的定时线程池
     *
     * 它拥有JDK线程池中所有提供的方法，同时也应该会支持执行异步任务、定时任务的功能
     */

    public static void main(String[] args) {
        final EventLoopGroup threadPool = new NioEventLoopGroup();

        // 递交Runnable类型的普通异步任务
        threadPool.execute(() ->{
            System.out.println("Runnable类型的普通异步任务执行~");
        });

        // 递交Callable类型的有返回异步任务
        final Future<String> submit = threadPool.submit(() -> {
            System.out.println("Callable类型的有返回异步任务执行~");
            return "Callable 回调结果";
        });
        System.out.println(submit);

        // 递交Callable类型的延时调度任务
        final ScheduledFuture<String> schedule = threadPool.schedule(() -> {
            System.out.println("延时任务 3秒后执行~");
            return "延时Callable任务 回调结果";
        }, 3, TimeUnit.SECONDS);
        System.out.println(schedule);

        //  // 递交Runnable类型的延迟间隔调度任务
        threadPool.scheduleAtFixedRate(() -> {
            System.out.println("Runnable类型任务 5秒后 每隔2秒执行一次~");
        }, 5, 2, TimeUnit.SECONDS);
    }
}
